from main import *
def test_cache_proxy():
    # 创建真实对象
    real_dao = ProductDaoImpl()
    
    # 创建代理对象
    cache_proxy = ProductCacheProxy(real_dao)
    
    # 第一次查询 - 应该从数据库获取
    print("\n测试1: 第一次查询商品1")
    product1 = cache_proxy.get_product(1)
    assert product1.id == 1
    assert product1.name == "iPhone 13"
    
    # 第二次查询相同商品 - 应该从缓存获取
    print("\n测试2: 第二次查询商品1")
    product1_cached = cache_proxy.get_product(1)
    assert product1_cached is product1  # 应该是同一个对象
    
    # 查询另一个商品
    print("\n测试3: 查询商品2")
    product2 = cache_proxy.get_product(2)
    assert product2.id == 2
    assert product2.name == "MacBook Pro"
    
    # 再次查询商品2 - 应该从缓存获取
    print("\n测试4: 再次查询商品2")
    product2_cached = cache_proxy.get_product(2)
    assert product2_cached is product2
    
    # 查询不存在的商品
    print("\n测试5: 查询不存在的商品")
    try:
        cache_proxy.get_product(999)
        assert False, "预期抛出异常"
    except ValueError as e:
        assert str(e) == "找不到ID为999的商品"
    
    print("\n所有测试通过!")

if __name__ == "__main__":
    # test_cache_proxy()
    # 演示示例
    print("演示示例:")
    real_dao = ProductDaoImpl()
    proxy = ProductCacheProxy(real_dao)
    
    # 第一次查询
    client_code(proxy, 1)
    
    # 第二次查询相同商品
    client_code(proxy, 1)
    
    # 查询另一个商品
    client_code(proxy, 3)
    
    # 再次查询
    client_code(proxy, 3)